package com.yeyks.consumer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yeyks.common.param.DownloadUserByParam;
import com.yeyks.common.result.UserStatisticalResult;
import com.yeyks.common.result.screen.DataScreenUserResult;
import com.yeyks.common.result.user.UserDetailResult;
import com.yeyks.consumer.dal.domain.UserInfo;
import com.yeyks.consumer.dto.BankBindDTO;
import com.yeyks.consumer.dto.UserInfoResult;
import com.yeyks.consumer.param.UserInfo.*;
import com.yeyks.consumer.vo.UserInfoLoginVo;

import java.util.List;


/**
 * <p>
 * C端用户表 服务类
 * </p>
 *
 * @author yun
 * @since 2019-06-25
 */
public interface UserInfoService extends IService<UserInfo> {
    /**
     * 通过手机号查询用户信息
     *
     * @param phone
     * @return
     */
    UserInfo selectUseInfoPhone(String phone);

    UserInfo getById(Integer id);

    UserInfo getByInviteCode(String inviteCode);

    /**
     * 获取用户手机号
     *
     * @param id
     * @return
     */
    String getPhoneById(Integer id);

    //创建用户
    UserInfo createUser(UserInfo userInfo);

    //用户登录
    UserInfoLoginVo login(UserInfoLoginParam param);

    //用户登录
    UserInfoLoginVo loginApp(UserInfoLoginParam param);

    List<UserInfoResult> queryPageList(UserInfoQueryParam userInfoQueryParam);

    int queryListCount(UserInfoQueryParam userInfoQueryParam);


    /**
     * 用户设置头像
     *
     * @param id
     * @param avatar
     * @return
     */
    Integer updateAvatar(Integer id, String avatar);

    /**
     * 增加用户，并返回用户id
     *
     * @param userInfo
     */
    void insertReturnId(UserInfo userInfo);

    /**
     * 通过用户id，修改用户密码
     *
     * @param id
     * @param password
     * @return
     */
    Integer modifyPasswordById(Integer id, String password);

    /**
     * 分享后用户通过手机号注册
     *
     * @param userInfo
     */
    Boolean phoneLogin(UserInfoPhoneLoginParam param);

    UserInfoLoginVo oneClickLogin(UserInfoOneClickLoginParam param);

    /**
     * 通过用户id获取token
     *
     * @param userId
     * @return
     */
    String getTokenByUseId(Integer userId);

    /**
     * 通过token获取用户信息
     *
     * @param token
     * @return
     */
    UserInfo tokenUserInfo(String token);

    /**
     * 通过邀请码获取该用户
     *
     * @param code
     * @return
     */
    UserInfo selectUserByCode(String code);

    /**
     * 更新
     *
     * @param userInfo
     */
    int updateUserInfo(UserInfo userInfo);

    /**
     * 判断用户是否需要绑卡
     *
     * @param userInfo
     * @return
     */
    Boolean isBind(UserInfo userInfo);

    /**
     * 用户绑定银行卡
     *
     * @param userInfo
     * @param bankCard
     * @param bankName
     * @param branchName
     * @param userName
     * @return
     */
    Boolean bankCard(UserInfo userInfo, String bankCard, String bankName, String branchName, String userName);

    /**
     * 获取用户绑卡信息
     *
     * @param userInfo
     * @return
     */
    BankBindDTO bankCardInfo(UserInfo userInfo);

    /**
     * 查询过去n天新增用户数
     *
     * @param day
     * @return
     */
    List<UserStatisticalResult> statDay(Integer day);

    String checkCode(UserInofCheckCodeParam param);

    /**
     * 查询邀请用户
     * @param parentIdParam
     * @return
     */
    List<UserInfo> queryUserByParentIdPage(UserInfoQueryByParentIdParam parentIdParam);

    /**
     * 根据ParentIds查询邀请用户
     *
     * @param parentIds
     * @return
     */
    List<UserInfo> queryChildUser(List<Integer> parentIds);

    /**
     * 查询邀请用户个数
     * @param parentIdParam
     * @return
     */
    Integer queryUserByParentIdCount(UserInfoQueryByParentIdParam parentIdParam);

    /**
     * 用户详情
     *
     * @param userId
     * @return
     */
    UserDetailResult userDetail(Integer userId);

    /**
     * 查询导出用户
     * @param param
     * @return
     */
    List<UserInfoResult> queryDownloadUserByParam(DownloadUserByParam param);

    /**
     * 数据大屏之全国用户数
     *
     * @return
     */
    DataScreenUserResult statUser();
}
